Un attentato è un atto di violenza, diretto contro un avversario chiaramente individuato, con cui si mira a eliminare il nemico o la sua rete di relazioni e interessi. L’attentato, solitamente, é il culmine di una strategia ben studiata.
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np
from datetime import datetime
from sklearn import linear_model
from sklearn.model_selection import train_test_split
Il dataset preso in analisi elenca tutti gli attacchi terroristici globali nell’arco degli anni 1970-2017. Contiene circa 181'000 osservazioni e 135 colonne, che però non sono state utilizzate tutte all’interno dell’analisi. Come riferimento, esso può essere reperito su Kaggle al link https://www.kaggle.com/START-UMD/gtd.
dfTerrorismo=pd.read_csv('csv/globalterrorismdb_0718dist.csv', low_memory=False,encoding='ISO-8859-1')
print("Dataset columns:")
print(dfTerrorismo.columns)
print("\nDataset size:",len(dfTerrorismo.index))
Il dataset utilizzato per le analisi contiene 18 colonne (quelle più rilevanti). Queste 18 colonne derivano da un lavoro di preparazione,in quanto il dataset originale conteneva tante colonne superflue. Si è deciso di introdurre una colonna che indicasse il numero totale di persone che hanno subito danni durante ogni attacco (morti e feriti).
dfTerrorismo.rename(columns={'iyear':'Anno',
'imonth':'Mese',
'iday':'Giorno',
'country_txt':'Nazione',
'region_txt':'Regione',
'city':'Citta',
'latitude':'Latitude',
'longitude':'Longitude',
'attacktype1_txt':'Tipo_attacco',
'target1':'Target',
'nkill':'Vittime',
'nwound':'Feriti',
'summary':'Riassunto',
'gname':'Gruppo_terroristico',
'targtype1_txt':'Target_type',
'weaptype1_txt':'Tipo_arma',
'motive':'Motivo'},inplace=True)
dfTerrorismo=dfTerrorismo[['Anno','Mese','Giorno','Nazione','Regione',
'Citta','Latitude','Longitude','Tipo_attacco',
'Vittime','Feriti','Target','Riassunto','Gruppo_terroristico',
'Target_type','Tipo_arma','Motivo']]
dfTerrorismo["Tot_colpiti"] = dfTerrorismo["Vittime"] + dfTerrorismo["Feriti"]
Inziamo il documento con un grafico che mostra le 10 nazioni più colpite nel corso degli anni. Per fare ciò abbiamo sommato il numero di persone colpite per ogni nazione e lo abbiamo ordinato.
Ciò che salta all'occhio é che le zone di "guerra" sono anche quelle con il maggior numero di vittime legate agli attacchi terroristici.
df10PiuColpite = dfTerrorismo.groupby("Nazione").sum()
df10PiuColpite = df10PiuColpite.sort_values("Tot_colpiti",ascending=False)
df10PiuColpite = df10PiuColpite[:10]
df10PiuColpite = df10PiuColpite.sort_values("Tot_colpiti")
fig = px.histogram(df10PiuColpite,orientation="h", y=df10PiuColpite.index,x="Tot_colpiti")
fig.layout["xaxis"]["title"] = "Number of person"
fig.layout["yaxis"]["title"] = "Nation"
fig.layout["title"] = "Iraq is the nation with the most attack"
fig.show()
In secondo primo grafico, possiamo notare la distribuzione in percentuale degli attacchi avvenuti negli anni, raggruppati per regione.
Come si può notare, la zona più colpita risulta la parte settentrionale e centrale dell’Africa,seguito dal sud asiatico. Ciò potrebbe essere dovuto alla maggior presenza di gruppi terroristici locali e a un forte attaccamento alla religione islamica. In opposto, la zona meno colpita risulta essere l’Oceania e l'Australia; in tale zone è stato raro nel corso degli anni lo svolgimento di attacchi terroristici.
Per quanto anche l’Europa negli anni non sembra essere stata presa “troppo” sotto assedio negli anni, a parte gli ultimi in cui si sono verificati diversi attacchi da parte dI alcuni militanti affiliati all’ ISIS.
Questi dati sono relativi al numero di attacchi avvenuti nei 47 anni rappresentati dal dataset, e non alla popolazione della regione mostrata.
dfVictimsAndInjuried= dfTerrorismo.groupby('Regione').sum()
dfVictimsAndInjuried["Totale"] = dfVictimsAndInjuried["Vittime"] + dfVictimsAndInjuried["Feriti"]
dfVictimsAndInjuried = dfVictimsAndInjuried.sort_values("Totale",ascending=False)
total = dfVictimsAndInjuried["Totale"].sum()
dfVictimsAndInjuried["Percentage_Victims_Injuried"] = (dfVictimsAndInjuried["Totale"]/total) * 100
fig = px.bar(dfVictimsAndInjuried,orientation="h",x='Percentage_Victims_Injuried',barmode="stack")
fig.update_layout(showlegend=False)
fig.layout["title"] = "In Norther Asia there was more victimis and injuries due to terrostic attack between 1970 and 2017"
fig.layout["yaxis"]["title"] = "Region"
fig.layout["xaxis"]["title"] = "Percentage Victims And Injuries"
fig.show()
Continuiamo ora con un grafico che rappresenta la distribuzione delle vittime per gruppo terroristico.
La maggioranza delle vittime è stata causata da gruppi terroristici, la cui denominazione è sconosciuta. Questo dato é dovuto al fatto che molti dati sono riconducibili ad attacchi effettuati da gruppi terrosistici locali e poco conosciuti in america, da dove proviene il grafico.
dfGroups = dfTerrorismo.groupby("Gruppo_terroristico").sum()
dfGroups = dfGroups.sort_values("Vittime",ascending=False)
dfGroups = dfGroups[:15]
fig = px.bar(dfGroups,y=dfGroups.index,x="Vittime",orientation="h")
fig.layout["xaxis"]["title"] = "Victims"
fig.layout["yaxis"]["title"] = "Terrorist Groups"
fig.layout["title"] = "The most attack are from unknow group"
fig.show()
In questo grafico ciò che si voleva mostare é quale tipo di attacco é il più disastroso.
Possiamo notare che il ratio tra il numero di attacchi e vittime é maggiore per il tipo di attacchi "dirottamento". Questo può essere dovuto al fatto che in questo tipo di attacchi rientra anche l'attacco alle torri gemelle che, é stato l'attacco con più vittime in assoluto. Un'altro dei possibili motivi può essere riconducibile al fatto che, un attacco di tipo dirottamento, non viene scelto spesso e, perciò, il ratio clacolato di questo tipo di attacchi aumenta
dfTerrorismoTypeAttack = dfTerrorismo.groupby("Tipo_attacco").sum()
dfTerrorismoTypeAttack["Tot_attack"] = dfTerrorismo.groupby("Tipo_attacco").count()["Anno"]
dfTerrorismoTypeAttack["percent_attack"] = dfTerrorismoTypeAttack["Tot_colpiti"] / dfTerrorismoTypeAttack["Tot_attack"]
dfTerrorismoTypeAttack = dfTerrorismoTypeAttack.sort_values("percent_attack",ascending=True)
fig = px.histogram(dfTerrorismoTypeAttack,orientation="h", y=dfTerrorismoTypeAttack.index,x="percent_attack",
hover_data=["Tot_colpiti","Tot_attack"])
fig.layout["xaxis"]["title"] = "Victim / Num attack"
fig.layout["yaxis"]["title"] = "Type attack"
fig.layout["title"] = "The bombing attack is the most used but have a low ratio victims / number of attack"
fig.show()
dfDataGraphic = dfTerrorismoTypeAttack.drop(columns=
dfTerrorismoTypeAttack.columns.difference(['Tot_colpiti','Tot_attack','percent_attack']))
dfDataGraphic = dfDataGraphic.sort_values("percent_attack",ascending=False)
dfDataGraphic
In questo terzo grafico, vediamo la distribuzione del "trend" degli attacchi terroristici per anno.
A partire dal 2011 vi è stato un notevole incremento degli attacchi, sicuramente per l’aumento dell’attività dei gruppi terroristici locali e quindi sconosciuti.
In opposto gli anni con con meno attacchi risalgono all’inizio degli anni ‘70, probabilmente all’alba dell’inizio della formazione di gruppi terroristici.
dfAnno = dfTerrorismo["Anno"].value_counts(ascending=False)
years = dfAnno.index.sort_values(ascending=True)
dfAnno = dfAnno.sort_values(ignore_index =True)
fig = px.line(x=years,y=dfAnno.values)
fig.layout["title"] = "Attacks have increased since 2011"
fig.layout["xaxis"]["title"] = "Year"
fig.layout["yaxis"]["title"] = "Total attacks per year"
fig.update_layout(showlegend=False)
fig.show()
In questo grafico ciò che abbiamo rappresentato su una mappa geografica i tipi di attacchi durante i 47 anni rappresentati dal dataset. La prima cosa che si nota é che c’è una distribuzione abbastanza omogenea in tutta europa degli attacchi di tipo “attacco alle strutture”.
Essendoci molti dati, é difficile estrarre informazioni precise, per questo motivo abbiamo creato lo stesso grafico con uno slider con cui è possibile selezionare l’anno. In questo modo oltre al tipo di attacco possiamo notare dei “trend” di tipo di attacco e della zona che negli anni cambiano.
Un esempio lampante si può notare in italia che, intorno alla fine degli anni ‘70 è stata vittima di molti attacchi.
worldPlot = px.scatter_mapbox(dfTerrorismo, lat="Latitude", lon="Longitude",zoom=3,
hover_name="Citta", hover_data=["Gruppo_terroristico","Anno"], labels={"Tipo_attacco": "Type attack"},
color="Tipo_attacco",opacity=0.3,center={'lon':8,'lat':48})
worldPlot.update_layout(mapbox_style="open-street-map")
worldPlot.update_layout(title="There is a relation between position and the type of attack")
worldPlot.show()
worldPlot.write_html("europePlot.html")